package com.yanfan.maintain.mapper;

import com.yanfan.attach.domain.DeviceDetail;
import com.yanfan.energy.domain.*;
import com.yanfan.iot.domain.DeviceLifecyle;
import com.yanfan.maintain.domain.ReleaseTask;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * (MaintainTasks)表数据库访问层
 *
 * @author makejava
 * @since 2023-03-10 11:10:00
 */
@Repository
public interface MaintainTasksDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    MaintainTasks queryById(Long id);


    /**
     * 查询指定行数据
     *
     * @param maintainTasks 查询条件
     * @return 对象列表
     */
    List<MaintainTasks> queryList(MaintainTasks maintainTasks);


    List<MaintainTasks> queryTaskByPage(MaintainTasks maintainTasks);


    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);


    /**
     * 修改数据
     *
     * @param maintainTasks 实例对象
     * @return 影响行数
     */
    int update(MaintainTasks maintainTasks);


    /**
     * 新增数据
     *
     * @param maintainTasks 实例对象
     * @return 影响行数
     */
    int insert(MaintainTasks maintainTasks);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<MaintainTasks> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<MaintainTasks> entities);

    int insertBatchDevice(@Param("entities") List<MaintainTasksDevice> maintainTasksDevices, @Param("taskId") Long taskId);

    int insertBatchDevice1(@Param("entities") List<DeviceDetail> maintainTasksDevices, @Param("taskId") Long taskId);

    int insertBatchDevices(@Param("entities") List<MaintainTasksDevice> devices);

    int insertBatchParts(@Param("entities") List<MaintainTasksDeviceParts> maintainTasksDeviceParts);

    /**
     * 删除任务相关联 设备 （通过任务id）
     *
     * @param id 任务id
     */
    void deleteTaskDeviceByTaskId(@Param("taskId") Long id);

    /**
     * 删除任务相关联 零件信息（通过任务ID）
     *
     * @param id
     */
    void deleteTaskPartsByTaskId(@Param("taskId") Long id);


    /**
     * 查询任务关联的 设备信息和设备零件信息
     *
     * @param id
     * @return
     */
    List<MaintainTasksDevice> queryTaskDevicePartsByPlanId(@Param("taskId") Long id);


    /**
     * 保养任务分布情况
     *
     * @param flagDate
     * @param flagDate
     */
    List<MaintainTasks> distributionList(@Param("flagDate") Date flagDate);

    List<MaintainTasksDevice> maintainDevicesAndParts(@Param("flagDate") Date flagDate);

    List<MaintainTasks> maintainPeriodList(@Param("dateType") Integer dateType, @Param("flagDate") Date flagDate);

    List<MaintainTasks> queryAllBeforeDate(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate, @Param("userId") Long userId);

    void sequenceTaskNext(OrderSequence orderSequence);


    List<OperationCase> queryOpertainCase();

    List<OperationCase> operationCaseNew(DeviceChartRequest request);

    List<OperationCase> deviceDevOps(DeviceChartRequest request);

    List<DevOpsTask> devOpsTaskList(DevOpsTask request);

    List<OperationCase> devOpsAnalyse(DeviceChartRequest request);

    List<DevOpsTask> devOpsTaskRecord(DevOpsTask request);

    void devOpsTaskFinish(DevOpsTask request);

    void devOpsTaskStart(DevOpsTask request);

    void devOpsTaskHandling(DevOpsTask request);

    ReleaseTask inspectionDetail(Long id);

    void insertProgress(TaskProgress taskProgress);

    List<TaskProgress> queryProgressByTypeId(ReleaseTask request);

    List<BaseDictEntity> selectDeviceStatistic(DeviceChartRequest request);

    List<DeviceDetail> newListByDevice(DeviceDetail device);

    List<DeviceDetail> queryDeviceByPlanId(Long id);

    List<DeviceDetail> selectMaintainDeviceByMaintainTaskId(Long id);

    int addDeviceLifecyle(Long deviceId);

    int updateDeviceLifecyle(DeviceLifecyle deviceLifecyle);

    List<DeviceLifecyle> getDeviceLifecyle(Long deviceId);

    /**
     * 操作日志
     */
    int addMaintainLog(MaintainLog maintainLog);

    List<MaintainLog> selectMaintainLog(Long deviceId);
}

